/**
 *Algoritmos y Estructurade Datos
 * 11 de julio del 2013
 * Ejericio No. 1
 *  Clase thelock con los metodos y atributos de un candado
 *  VICTOR FUENTES 12298
 *  SAMANTHA CATÚN 12382
 *  YUCELY BEB 12537
 */
public  class thelock implements ithelock{
    protected int[] lista; //guarda la contraseña
    protected boolean estado;//true si esta cerrado, false si esta abierto
    protected boolean llave;//true si esta correcto, false si esta incorrecto 
    protected int largo;//el largo de la lista, o sea el largo de la contraseña
    protected int indice;//indice del movimiento en la lista 
    
    public thelock(int i){
        largo=i;
        indice=0;
        estado=true;//true de que esta cerrado
        lista=new int[largo];
        llave=true;
    }
    
    public thelock(){
        largo=4;
        lista=new int[largo];
        lista[0]=9;
        lista[1]=0;
        lista[2]=21;
        lista[3]=0;
        
    }
    
      
    public boolean getLlave(){
        return llave;
    }
    
    public boolean getEstado(){
        return estado;
    }
    public void setLlave(){
        llave=true;
    }
    public void setIndice(int in){
        indice=in;
    }
    
    public void reset(){
        indice=0;
    }
    
    public int getLargo(){
        return largo;
    }
 
    
    
    @Override
    public void ingreso(int i, int b){ 
        if((i<largo) && (b>=0 && b<=25)){
                lista[i]=b;
            }
        else
                lista[i]=0;//si no se cumplen las condicones no se agrega 0 al indice        
    }
        
    @Override
    public boolean isLocked(){//validacion excesiva 
        
        if(getLlave()==false){
            return true;//retorno de true si esta cerrado
        }else{
            return false;//devuelve false si esta abierto
        }
        
    }
    
    
     public String toString(){
        String result= "El estado del candado es: ";
        int c = largo; 
        while (c< largo){
           result+="\n "+lista[c];
           c=c-1;
                }
        return result;
    }
     
        @Override
    public void press(int b){
        if((llave==true)&&(b==lista[indice])){ 
             llave=true;// su se cumole la condicion se pone llave en true
        }
        else if(b<0 || b>25){
        }else {
                llave=false;
            }
        }            
    
    @Override
    public void lock(){//si el candado esta cerrado(true), lo abre(false)
        if (estado==true){
            estado=false;
        }
    }


    

}